import { ajaxGet, ajaxPost, ajaxDelete, uploadImg } from './request'

export const fileApi = {
  // 获取我的文件列表
  getMyFiles(params) {
    console.log('调用getMyFiles API，参数:', params)
    return ajaxGet({
      url: 'api/files/my',
      params
    }).then(response => {
      console.log('getMyFiles API响应:', response)
      return response
    }).catch(error => {
      console.error('getMyFiles API错误:', error)
      throw error
    })
  },

  // 获取公开文件列表
  getPublicFiles(params) {
    console.log('调用getPublicFiles API，参数:', params)
    return ajaxGet({
      url: 'api/files/public',
      params
    }).then(response => {
      console.log('getPublicFiles API响应:', response)
      return response
    }).catch(error => {
      console.error('getPublicFiles API错误:', error)
      throw error
    })
  },

  // 获取文件详情
  getFileById(id) {
    return ajaxGet({
      url: `api/files/${id}`
    })
  },

  // 上传文件
  uploadFile(file) {
    console.log('调用uploadFile API，参数:', { file: file.name })
    return uploadImg({
      url: 'api/files/upload',
      params: {
        file: file
      }
    }).then(response => {
      console.log('uploadFile API响应:', response)
      return response
    }).catch(error => {
      console.error('uploadFile API错误:', error)
      throw error
    })
  },

  // 删除文件
  deleteFile(id) {
    return ajaxDelete({
      url: `api/files/${id}`
    })
  },

  // 下载文件
  downloadFile(id) {
    return new Promise((resolve, reject) => {
      // 获取token
      const token = localStorage.getItem('logintoken') || sessionStorage.getItem('logintoken')
      
      // 使用fetch下载文件
      fetch(`http://127.0.0.1:5000/api/files/download/${id}`, {
        method: 'GET',
        headers: {
          'Authorization': `Bearer ${token}`
        }
      })
      .then(response => {
        if (!response.ok) {
          throw new Error('下载失败')
        }
        return response.blob()
      })
      .then(blob => {
        // 创建下载链接
        const url = window.URL.createObjectURL(blob)
        const a = document.createElement('a')
        a.href = url
        a.download = `file_${id}` // 默认文件名
        document.body.appendChild(a)
        a.click()
        document.body.removeChild(a)
        window.URL.revokeObjectURL(url)
        resolve(blob)
      })
      .catch(error => {
        reject(error)
      })
    })
  },

  // 批量删除文件
  batchDeleteFiles(ids) {
    const promises = ids.map(id => this.deleteFile(id))
    return Promise.all(promises)
  },

  // 获取所有文件列表（管理员专用）
  getAllFiles(params) {
    return ajaxGet({
      url: 'api/files/admin/list',
      params
    })
  }
}

// 默认导出
export default fileApi 